#include <sys_head.h>
#include "arg.h"

//argv[1] IP地址
//argv[2] 端口

void Client(int Sock_fd);

int main(int argc, char const *argv[])
{
    //判断命令行参数
    if (3 != argc)
    {
        printf("参数错误:%s ip port\n",argv[0]);
        return -1;
    }
    // 1、创建套接字
    int Sock_fd = socket(AF_INET,SOCK_STREAM,0);
    if (-1 == Sock_fd)
    {
        ERRLOG("socket err");
        return -1;
    }
    // ​2、填充服务器网络信息结构体
    struct sockaddr_in Sock_addr;
    Sock_addr.sin_family = AF_INET;                 //选择IPV4
    Sock_addr.sin_port = htons(atoi(argv[2]));      //给定端口 atoi 将字符串转化为数字
    Sock_addr.sin_addr.s_addr = inet_addr(argv[1]); //IP地址

    socklen_t Sock_size = sizeof(Sock_addr);
    // 3、与服务器建立连接 connect
    if (-1 == connect(Sock_fd,(struct sockaddr *)&Sock_addr,Sock_size))
    {
        ERRLOG("connect err");
        return -1;
    }
    // 4、接收数据
    Client(Sock_fd);

    // 4、关闭套接字 close
    close(Sock_fd);
    return 0;
}

void Client(int Sock_fd)
{
    // //接收测试
    // char buf[128];
    // memset(buf,0,sizeof(buf));
    // recv(Sock_fd,buf,sizeof(buf),0);
    // printf("信息:%s\n",buf);
    // return;

    // 协议信息
    agr info;
    // 字符串
    char buf[128];
    char name[128];

    // 清空字符串和协议信息
    memset(buf , 0 , sizeof(buf));
    memset(name , 0 , sizeof(name));
    memset(info.buf , 0 , sizeof(info.buf));


    // 发送连接成功给服务器
    strcpy(buf , "连接成功");
    send(Sock_fd , buf , strlen(buf) , 0);

    //清空字符串
    memset(buf , 0 , sizeof(buf));

    // 接收服务器的内容
    recv(Sock_fd , buf , sizeof(buf) , 0);
    printf("%s\n" , buf);

    // 开始进行数据收发
    while (1)
    {
        // 清空数据
        memset(info.buf , 0 , sizeof(info.buf));

        // 接收数据
        recv(Sock_fd , info.buf , sizeof(info.buf) , 0);

        // 分析内容
        if (1 == info.Name.bytes)
        {
            printf("修改名字:%s\n" , info.Name.Name);
            strcpy(name , info.Name.Name);
        }

        if (2 == info.Data.bytes)
        {
            printf("[%s]:%s\n", name , info.Data.Data);

            if (!strcmp(info.Data.Data , "quit"))
            {
                printf("退出成功\n");
                return ;
            }
        }
    }
}
